#!usr/bin/env python  
# -*- coding:utf-8 _*-
""" 
@author:pengfeifu
@file: 冒泡排序.py 
@version:
@time: 2021/11/14 
@email:1324734112@qq.com
@desc： 冒泡排序
思路：每一趟，前后两两比较，给最大的值排在最后面，
第二趟，只用再无序区内，再次两两比较，给最大的排在最后面
总共n-1趟，因为最后一趟，一个数据，无需再次排序
@function：常用函数
"""

import random


def bubble_sort(li):
    for i in range(len(li) - 1):
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
        print(li)


# 冒泡最优算法，排除有序趟数
def bubble_sort_best(li):
    for i in range(len(li) - 1):  # 第i趟
        return_flag = False       # 列表是否已经有序，有序直接return,，降低循环次数
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
                return_flag = True
        if not return_flag:
            return
        print(li)


if __name__ == "__main__":
    list_arr = [random.randint(0, 1000) for i in range(10)]
    # print(list_arr)
    list_arr2 = [0, 1, 2, 4, 9, 5, 7, 8, 6, 3]
    bubble_sort_best(list_arr2)
